#!/bin/sh

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="daemon monitor"
NAME=monit
DAEMON=/usr/bin/$NAME
CONFIG="/etc/monitrc"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
MONIT_OPTS=

# exit if binary is missing
[ -x "$DAEMON" ] || exit 0

monit_check_config() {
    # Check for existing config file
    if [ ! -f "$CONFIG" ]
    then
        echo " missing config, please edit $CONFIG."
        exit 1
    fi

    # Check for emtpy config
    if [ $(grep -cv '^\s*$\|^\s*#' $CONFIG) -eq 0 ]
    then
        echo " empty config, please edit $CONFIG."
        exit 2
    fi

    # Let monit check syntax
    if ! $DAEMON -c $CONFIG -t >/dev/null 2>&1
    then
        echo " syntax error in $CONFIG"
        exit 3
    fi
}

is_running() {
    start-stop-daemon -K --quiet --test --exec $DAEMON \
        --pidfile $PIDFILE
}

do_start() {
    is_running && return 1
    start-stop-daemon -S --quiet --pidfile $PIDFILE --exec $DAEMON -- \
        $MONIT_OPTS || return 2
}

do_stop() {
    is_running || return 0
    start-stop-daemon -K --quiet --pidfile $PIDFILE --exec $DAEMON
    RETVAL="$?"

    # wait up to 30 seconds until daemon stopped
    for i in $(seq 30)
    do
        sleep 1
        echo -n '.'
        if ! is_running
        then
            break
        fi
    done

    # see if it's still running
    if is_running
    then
        start-stop-daemon -K --quiet --signal KILL --pidfile $PIDFILE \
            --exec $DAEMON

        for i in $(seq 5)
        do
            sleep 1
            echo -n '.'
            if ! is_running
            then
                break
            fi
        done

        if is_running
        then
            return 2
        fi
    fi

    rm -f $PIDFILE
    return "$RETVAL"
}

do_reload() {
    # monit has an own call for this, no need to send SIGHUP
    $DAEMON reload
}

monit_check_perms() {
  # Check the permission on configfile.
  # The permission must not have more than -rwx------ (0700) permissions.

  # Skip checking, fix perms instead.
  /bin/chmod go-rwx $CONFIG
}

monit_checks() {
  # Check for emtpy configfile
  monit_check_config
  # Check permissions of configfile
  monit_check_perms
}

case "$1" in
    start)
        monit_checks
        do_start
        case "$?" in
            0)  ;;
            1)  echo "$DESC already running." ;;
            *)  echo "Starting $DESC failed." ;;
        esac
        ;;
    stop)
        echo -n "Stopping $DESC ."
        do_stop
        case "$?" in
            0|1)    echo " Done." ;;
            *)      echo " Failed." ;;
        esac
        ;;
    reload)
        do_reload
        ;;
    restart|force-reload)
        echo -n "Restarting $DESC .."
        do_stop
        case "$?" in
            0|1)
                echo ""
                do_start
                case "$?" in
                    0)  ;;
                    1)  echo " Failed." ;; # Old process still running
                    *)  echo " Failed." ;; # Failed to start
                esac
                ;;
            *)
                echo " Failed." # Failed to stop
                ;;
        esac
        ;;
    status)
        if is_running
        then
            echo "$NAME is running with PID $(cat $PIDFILE) ..."
        else
            echo "$NAME is not running"
        fi
        ;;
    syntax)
        $DAEMON -c $CONFIG -t
        ;;
    *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload|status}" >&2
        exit 3
        ;;
esac

:
